//
// Created by LiuYou on 2021/5/6.
//

#ifndef HIGHPERFORMANCELINUXSERVERPROGRAMMING_LINUX_CLIENTDATA_HPP
#define HIGHPERFORMANCELINUXSERVERPROGRAMMING_LINUX_CLIENTDATA_HPP


#include <netinet/in.h>

// TODO 注意: 这里直接写是不行的,
//  CLion错误: Fields must have a constant size: 'variable length array in structure' extension will never be supported
//  字段必须具有恒定大小：“结构中的可变长度数组”扩展名将永远不受支持
//  所以需要加上constexpr关键字。
namespace error {
    // 把这个错误的函数写在这个error命名空间中是为了后来复习时候可以看懂, 这是一个错误的写法。注意。所以没有删掉
    // 但是编译器认为这两个是多重定义, 所以我还是把它注释掉吧！
//    int getBufferSize() {
//        return 64;
//    }
}

constexpr int getBufferSize() {
    return 64;
}

class ClientData {
public:

    sockaddr_in address;
    char* writeBuf;
    char buf[getBufferSize()];

public:
    const sockaddr_in& getAddress() const;

    void setAddress(const sockaddr_in& address);

    char* getWriteBuf() const;

    void setWriteBuf(char* writeBuf);

    const char* getBuf() const;

};

int setNonblocking(int fd);

#endif //HIGHPERFORMANCELINUXSERVERPROGRAMMING_LINUX_CLIENTDATA_HPP
